#ifndef DSDESIGN_LINKEDQUEUESTACK_H
#define DSDESIGN_LINKEDQUEUESTACK_H

#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define TRUE 1
#define FALSE 0

typedef int Status;


typedef struct CustNode {
    int no;           //客户编号
    long arrtime;     // 到达时间
    long durtime;     // 交易时间
    long leavetime;   //离开时间
    double amount;   // 交易金额，负值表示取款/借款，正值表示存款/还款
    struct CustNode *next;        // 下一个结点的索引
} CustNode,*QueuePtr,*LStack;


typedef struct {
    QueuePtr front;//队头指针
    QueuePtr rear;//队尾指针
}LQueue;




void InitQueue_LQ(LQueue &Q);//构造一个空队列Q
Status DestroyQueue_LQ(LQueue &Q);//销毁队列Q
Status QueueEmpty_LQ(LQueue Q);//若队列Q为空，则返回TRUE，否则返回FALSE
int QueueLength_LQ(LQueue Q);//返回队列Q中元素个数，即队列的长度
Status GetHead_LQ(LQueue Q,double &amount);//若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR

Status EnQueue_LQ(LQueue &Q,CustNode *pt);//在队列Q的队尾插入结点node
CustNode * DeQueue_LQ(LQueue &Q);//若队列Q非空,返回头结点的指针



Status InitStack_LS();//初始化链栈S
void DestroyStack_LS();//销毁链栈S
//Status StackEmpty_LS(LStack s);/*判断空栈,若栈S空则返回TRUE，否则返回FALSE*/


Status Push_LS(LStack &S,CustNode *p) ;

CustNode* Pop_LS(LStack&S); // 栈S的栈顶元素出栈,并用e返回
//Status GetTop_LS(LStack S,ElemType &e);//取栈S的栈顶元素,并用e返回
CustNode* myMalloc() ;
void myFree(CustNode *node) ;
#endif //DSDESIGN_LINKEDQUEUESTACK_H
